home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / GIMP 2.6.8 / gimp-2.6.8-i686-setup.exe / {app} / share / gimp / 2.0 / scripts / neon-logo.scm < prev    next >
Text File  |  2009-12-15  |  9KB  |  296 lines

  1. ; GIMP - The GNU Image Manipulation Program
  2. ; Copyright (C) 1995 Spencer Kimball and Peter Mattis
  3. ;
  4. ; This program is free software; you can redistribute it and/or modify
  5. ; it under the terms of the GNU General Public License as published by
  6. ; the Free Software Foundation; either version 2 of the License, or
  7. ; (at your option) any later version.
  8. ;
  9. ; This program is distributed in the hope that it will be useful,
  10. ; but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. ; GNU General Public License for more details.
  13. ;
  14. ; You should have received a copy of the GNU General Public License
  15. ; along with this program; if not, write to the Free Software
  16. ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. ;
  18. ; NEON
  19. ; Create a text effect that simulates neon lighting
  20.  
  21. (define (apply-neon-logo-effect img
  22.                                 tube-layer
  23.                                 size
  24.                                 bg-color
  25.                                 glow-color
  26.                                 shadow)
  27.  
  28.   (define (set-pt a index x y)
  29.     (begin
  30.      (aset a (* index 2) x)
  31.      (aset a (+ (* index 2) 1) y)))
  32.  
  33.   (define (neon-spline1)
  34.     (let* ((a (cons-array 6 'byte)))
  35.       (set-pt a 0 0 0)
  36.       (set-pt a 1 127 145)
  37.       (set-pt a 2 255 255)
  38.       a))
  39.  
  40.   (define (neon-spline2)
  41.     (let* ((a (cons-array 6 'byte)))
  42.       (set-pt a 0 0 0)
  43.       (set-pt a 1 110 150)
  44.       (set-pt a 2 255 255)
  45.       a))
  46.  
  47.   (define (neon-spline3)
  48.     (let* ((a (cons-array 6 'byte)))
  49.       (set-pt a 0 0 0)
  50.       (set-pt a 1 100 185)
  51.       (set-pt a 2 255 255)
  52.       a))
  53.  
  54.   (define (neon-spline4)
  55.     (let* ((a (cons-array 8 'byte)))
  56.       (set-pt a 0 0 0)
  57.       (set-pt a 1 64 64)
  58.       (set-pt a 2 127 192)
  59.       (set-pt a 3 255 255)
  60.       a))
  61.  
  62.   (define (find-hue-offset color)
  63.     (let* (
  64.           (R (car color))
  65.           (G (cadr color))
  66.           (B (caddr color))
  67.           (max-val (max R G B))
  68.           (min-val (min R G B))
  69.           (delta (- max-val min-val))
  70.           (hue 0)
  71.           )
  72.       (if (= delta 0)
  73.           0
  74.           (begin
  75.             (cond
  76.               ((= max-val R)
  77.                (set! hue (/ (- G B) (* 1.0 delta))))
  78.               ((= max-val G)
  79.                (set! hue (+ 2 (/ (- B R) (* 1.0 delta)))))
  80.               ((= max-val B)
  81.                (set! hue (+ 4 (/ (- R G) (* 1.0 delta)))))
  82.             )
  83.             (set! hue (* hue 60))
  84.             (if (< hue 0) (set! hue (+ hue 360)))
  85.             (if (> hue 360) (set! hue (- hue 360)))
  86.             (if (> hue 180) (set! hue (- hue 360)))
  87.             hue
  88.           )
  89.       )
  90.     )
  91.   )
  92.  
  93.   (let* (
  94.         (tube-hue (find-hue-offset glow-color))
  95.         (shrink (/ size 14))
  96.         (grow (/ size 40))
  97.         (feather (/ size 5))
  98.         (feather1 (/ size 25))
  99.         (feather2 (/ size 12))
  100.         (inc-shrink (/ size 100))
  101.         (shadow-shrink (/ size 40))
  102.         (shadow-feather (/ size 20))
  103.         (shadow-offx (/ size 10))
  104.         (shadow-offy (/ size 10))
  105.         (width (car (gimp-drawable-width tube-layer)))
  106.         (height (car (gimp-drawable-height tube-layer)))
  107.         (glow-layer (car (gimp-layer-new img width height RGBA-IMAGE
  108.                      "Neon Glow" 100 NORMAL-MODE)))
  109.         (bg-layer (car (gimp-layer-new img width height RGB-IMAGE
  110.                        "Background" 100 NORMAL-MODE)))
  111.         (shadow-layer (if (= shadow TRUE)
  112.                           (car (gimp-layer-new img width height RGBA-IMAGE
  113.                            "Shadow" 100 NORMAL-MODE))
  114.                           0))
  115.         (selection 0)
  116.     (max_shrink 0)
  117.         )
  118.  
  119.     (gimp-context-push)
  120.  
  121.     ; ensure that we don't shrink selection so much
  122.     ; that we create an empty selection.
  123.     (gimp-selection-layer-alpha tube-layer)
  124.     (while (= (car (gimp-selection-is-empty img)) FALSE)
  125.     (begin
  126.       (gimp-selection-shrink img 1)
  127.           (set! max_shrink (+ max_shrink 1))
  128.           ; escape early if we know that we can perform
  129.       ; as much shrink steps as we want
  130.       (if (> max_shrink shrink)
  131.           (gimp-selection-none img))
  132.     )
  133.     )
  134.     (if (= (car (gimp-selection-is-empty img)) TRUE)
  135.     (if (> max_shrink 0)
  136.         (set! max_shrink (- max_shrink 1))))
  137.     ; clamp upper bounds to valid shrink step range
  138.     (if (> shrink max_shrink)
  139.     (set! shrink max_shrink))
  140.     (if (> inc-shrink (/ max_shrink 3))
  141.     (set! inc-shrink (/ max_shrink 3)))
  142.     (if (> shadow-shrink max_shrink)
  143.     (set! shadow-shrink max_shrink))
  144.  
  145.     (script-fu-util-image-resize-from-layer img tube-layer)
  146.     (script-fu-util-image-add-layers img glow-layer bg-layer)
  147.     (if (not (= shadow 0))
  148.         (begin
  149.           (gimp-image-add-layer img shadow-layer -1)
  150.           (gimp-edit-clear shadow-layer)))
  151.  
  152.     (gimp-context-set-background '(0 0 0))
  153.     (gimp-selection-layer-alpha tube-layer)
  154.     (set! selection (car (gimp-selection-save img)))
  155.     (gimp-selection-none img)
  156.  
  157.     (gimp-edit-clear glow-layer)
  158.     (gimp-edit-clear tube-layer)
  159.  
  160.     (gimp-context-set-background bg-color)
  161.     (gimp-edit-fill bg-layer BACKGROUND-FILL)
  162.  
  163.     (gimp-selection-load selection)
  164.     (gimp-context-set-background '(255 255 255))
  165.     (gimp-edit-fill tube-layer BACKGROUND-FILL)
  166.     (gimp-selection-shrink img shrink)
  167.     (gimp-context-set-background '(0 0 0))
  168.     (gimp-edit-fill selection BACKGROUND-FILL)
  169.     (gimp-edit-clear tube-layer)
  170.  
  171.     (gimp-selection-none img)
  172.     (if (not (= feather1 0))
  173.     (plug-in-gauss-rle RUN-NONINTERACTIVE img tube-layer feather1 TRUE TRUE))
  174.     (gimp-selection-load selection)
  175.     (if (not (= feather2 0))
  176.     (plug-in-gauss-rle RUN-NONINTERACTIVE img tube-layer feather2 TRUE TRUE))
  177.  
  178.     (gimp-selection-feather img inc-shrink)
  179.     (gimp-selection-shrink img inc-shrink)
  180.     (gimp-curves-spline tube-layer 4 6 (neon-spline1))
  181.  
  182.     (gimp-selection-load selection)
  183.     (gimp-selection-feather img inc-shrink)
  184.     (gimp-selection-shrink img (* inc-shrink 2))
  185.     (gimp-curves-spline tube-layer 4 6 (neon-spline2))
  186.  
  187.     (gimp-selection-load selection)
  188.     (gimp-selection-feather img inc-shrink)
  189.     (gimp-selection-shrink img (* inc-shrink 3))
  190.     (gimp-curves-spline tube-layer 4 6 (neon-spline3))
  191.  
  192.     (gimp-layer-set-lock-alpha tube-layer 1)
  193.     (gimp-selection-layer-alpha tube-layer)
  194.     (gimp-selection-invert img)
  195.     (gimp-context-set-background glow-color)
  196.     (gimp-edit-fill tube-layer BACKGROUND-FILL)
  197.  
  198.     (gimp-selection-none img)
  199.     (gimp-layer-set-lock-alpha tube-layer 0)
  200.     (gimp-curves-spline tube-layer 4 8 (neon-spline4))
  201.  
  202.     (gimp-selection-load selection)
  203.     (gimp-selection-grow img grow)
  204.     (gimp-selection-invert img)
  205.     (gimp-edit-clear tube-layer)
  206.     (gimp-selection-invert img)
  207.  
  208.     (gimp-selection-feather img feather)
  209.     (gimp-edit-fill glow-layer BACKGROUND-FILL)
  210.  
  211.     (if (not (= shadow 0))
  212.         (begin
  213.           (gimp-selection-load selection)
  214.           (gimp-selection-grow img grow)
  215.           (gimp-selection-shrink img shadow-shrink)
  216.           (gimp-selection-feather img shadow-feather)
  217.           (gimp-selection-translate img shadow-offx shadow-offy)
  218.           (gimp-context-set-background '(0 0 0))
  219.           (gimp-edit-fill shadow-layer BACKGROUND-FILL)))
  220.     (gimp-selection-none img)
  221.  
  222.     (gimp-drawable-set-name tube-layer "Neon Tubes")
  223.     (gimp-image-remove-channel img selection)
  224.  
  225.     (gimp-context-pop)
  226.   )
  227. )
  228.  
  229. (define (script-fu-neon-logo-alpha img
  230.                                    tube-layer
  231.                                    size
  232.                                    bg-color
  233.                                    glow-color
  234.                                    shadow)
  235.   (begin
  236.     (gimp-image-undo-group-start img)
  237.     (apply-neon-logo-effect img tube-layer (* size 5) bg-color glow-color shadow)
  238.     (gimp-image-undo-group-end img)
  239.     (gimp-displays-flush)
  240.   )
  241. )
  242.  
  243. (script-fu-register "script-fu-neon-logo-alpha"
  244.   _"N_eon..."
  245.   _"Convert the selected region (or alpha) into a neon-sign like object"
  246.   "Spencer Kimball"
  247.   "Spencer Kimball"
  248.   "1997"
  249.   "RGBA"
  250.   SF-IMAGE      "Image"                 0
  251.   SF-DRAWABLE   "Drawable"              0
  252.   SF-ADJUSTMENT _"Effect size (pixels)" '(30 1 200 1 10 0 1)
  253.   SF-COLOR      _"Background color"     "black"
  254.   SF-COLOR      _"Glow color"           '(38 211 255)
  255.   SF-TOGGLE     _"Create shadow"        FALSE
  256. )
  257.  
  258. (script-fu-menu-register "script-fu-neon-logo-alpha"
  259.                          "<Image>/Filters/Alpha to Logo")
  260.  
  261. (define (script-fu-neon-logo text
  262.                              size
  263.                              font
  264.                              bg-color
  265.                              glow-color
  266.                              shadow)
  267.   (let* (
  268.         (img (car (gimp-image-new 256 256 RGB)))
  269.         (border (/ size 4))
  270.         (tube-layer (car (gimp-text-fontname img -1 0 0 text border TRUE size PIXELS font)))
  271.         )
  272.     (gimp-image-undo-disable img)
  273.     (apply-neon-logo-effect img tube-layer size bg-color glow-color shadow)
  274.     (gimp-image-undo-enable img)
  275.     (gimp-display-new img)
  276.   )
  277. )
  278.  
  279. (script-fu-register "script-fu-neon-logo"
  280.   _"N_eon..."
  281.   _"Create a logo in the style of a neon sign"
  282.   "Spencer Kimball"
  283.   "Spencer Kimball"
  284.   "1997"
  285.   ""
  286.   SF-STRING     _"Text"               "NEON"
  287.   SF-ADJUSTMENT _"Font size (pixels)" '(150 2 1000 1 10 0 1)
  288.   SF-FONT       _"Font"               "Blippo"
  289.   SF-COLOR      _"Background color"   "black"
  290.   SF-COLOR      _"Glow color"         '(38 211 255)
  291.   SF-TOGGLE     _"Create shadow"      FALSE
  292. )
  293.  
  294. (script-fu-menu-register "script-fu-neon-logo"
  295.                          "<Image>/File/Create/Logos")
  296.